tg-me.com/pyproglib/6828
Last Update:
🔁 Как перевернуть последовательность в Python: срезы, .reverse() и reversed()
Иногда нужно пройтись по списку в обратном порядке. Python предлагает как минимум три способа сделать это. Разберём, чем они отличаются и когда что использовать.
Срезы в Python поддерживают формат [start:stop:step]
. Если шаг отрицательный, список читается справа налево:
colors = ["purple", "blue", "green", "pink", "red"]
print(colors[::-1])
# ['red', 'pink', 'green', 'blue', 'purple']
Можно использовать это прямо в цикле:
for color in colors[::-1]:
print("I like", color)
Метод
.reverse()
переворачивает список на месте, изменяя оригинальный объект:colors = ["purple", "blue", "green", "pink", "red"]
colors.reverse()
print(colors)
# ['red', 'pink', 'green', 'blue', 'purple']
— Метод не возвращает новый список, а изменяет оригинал.
— Работает только с типом list. Строки, кортежи и другие объекты не поддерживают
.reverse()
.Наиболее универсальный и «питоничный» способ — использовать встроенную функцию
reversed()
:colors = ["purple", "blue", "green", "pink", "red"]
for color in reversed(colors):
print("I like", color)
— Работает на любых обратимых итерируемых объектах, не только на списках.
— Не копирует список — возвращает итератор, который идёт с конца.
— Оригинальный объект не изменяется.
Можно использовать
next()
для получения элементов по одному:r = reversed(colors)
next(r) # 'red'
next(r) # 'pink'
Словари в Python 3.7+ сохраняют порядок добавления. Значит, их можно тоже «перевернуть»:
capitals = {
"New South Wales": "Sydney",
"Victoria": "Melbourne",
"Western Australia": "Perth",
}
for state, capital in reversed(capitals.items()):
print(f"The capital of {state} is {capital}")
•
enumerate()
— добавляет индексацию•
zip()
— объединяет несколько последовательностей•
reversed()
— переворачивает порядок обходаfor i, color in enumerate(colors, 1):
print(f"{i}. {color}")
Не все объекты в Python можно перевернуть. Например, файлы и генераторы не поддерживают
reversed()
, потому что у них нет фиксированной длины и индексов.• Если нужно просто получить копию списка в обратном порядке — используйте
colors[::-1]
.• Если хотите перевернуть список на месте — метод
.reverse()
.• Если важно не трогать оригинал, сэкономить память и работать с любыми итерируемыми объектами — используйте
reversed()
.💬 Поделитесь в комментариях, каким способом чаще пользуетесь вы.
🔁 Репостните коллеге, который до сих пор пишет
for i in range(len(...))
.Библиотека питониста #буст